#include <iostream>
// c99引入boolean，非0即true
#include <stdbool.h>
#include <cstring>

using namespace std;

/**
 * 在java中声明与实现在一起，方法声明后直接写方法体
 * 在C中可以放在一起也可以分开：.h的头文件、.cpp实现
 *
 */
// 基本数据类型、数组
int main10() {
    int i = 0;
    long j = 1;
    printf("long size = %d\n", sizeof(j));

    // 重定义int，指定int无论在什么系统都是是多少位：32位、64位
    int32_t a = 1;
    int64_t b = 2;

    float f = 1.2f; // %f
    double d = 1.2; // %lf

    // 数组，分配在栈内存
    int intArr[10]; // 如果不赋值，需要指定长度
    int charArr[] = {'a', 'b'};

    // 在堆中动态申请内存
    void *mem = malloc(1 * 1024 * 1024);// 申请1M内存
    // 初始化申请的内存,将mem指定的内存初始化为0，长度为mSize
    size_t mSize = 1 * 1024 * 1024;
    memset(mem, 0, mSize);

    // 重新对malloc申请的内存调整,扩容
    realloc(mem, 20 * sizeof(int));

    // 释放内存
    free(mem);
    // 需要置空，否则就变成悬空指针
    mem = nullptr;

    // 申请内存并初始化为null，在堆中申请10个int大小的内存
    int *i1 = (int *) calloc(10, sizeof(int));
    // 相当于
    int *i2 = (int *) malloc(sizeof(int) * 10);
    memset(i2, 0, sizeof(int) * 10);

    // 释放内存
    free(i1);
    free(i2);

    char str[100];
    //类似String.format，将格式化的数据赋值给str
    sprintf(str, "age:%d", 1);
    printf("str=%s", str);
    return 0;
}
